// API配置和工具函数
// 建议使用本机/局域网网关地址，避免公网超时
// 注意：请根据实际网关注册的IP地址修改此处
const baseURL = 'http://192.168.43.1:8080' // 网关地址（请确保 ruoyi-gateway 已启动）

/**
 * 请求封装
 */
function request(url, method = 'GET', data = {}) {
  return new Promise((resolve, reject) => {
    wx.request({
      url: baseURL + url,
      method: method,
      data: data,
      header: {
        'content-type': 'application/json'
      },
      // 增加超时时间到15秒
      timeout: 15000,
      success: (res) => {
        if (res.statusCode === 200) {
          if (res.data.code === 200) {
            resolve(res.data.data)
          } else {
            reject(new Error(res.data.msg || '请求失败'))
          }
        } else if (res.statusCode === 404) {
          reject(new Error(`404 NOT FOUND: 请检查网关路由配置和服务是否启动。请求路径: ${url}`))
        } else {
          reject(new Error(`网络请求失败: ${res.statusCode}`))
        }
      },
      fail: (err) => {
        // 提供更详细的错误信息
        let errorMsg = '网络请求失败'
        if (err.errMsg) {
          if (err.errMsg.includes('timeout')) {
            errorMsg = '请求超时，请检查网络连接或服务是否启动'
          } else if (err.errMsg.includes('fail')) {
            errorMsg = '网络连接失败，请检查服务地址是否正确'
          }
        }
        reject(new Error(errorMsg))
      }
    })
  })
}

module.exports = {
  // 获取轮播图列表
  getBanners() {
    return request('/travel/banner/app/list')
  },
  
  // 获取产品列表
  getProducts(params = {}) {
    return request('/travel/product/app/list', 'GET', params)
  },
  
  // 获取热门产品（前5条，按id排序）
  getHotProducts() {
    return request('/travel/product/app/hot/list', 'GET')
  },
  
  // 获取产品详情
  getProductDetail(productId) {
    return request(`/travel/product/app/${productId}`)
  },
  
  // 搜索产品（支持按目的地、品类、产品名称搜索）
  searchProducts(params = {}) {
    return request('/travel/product/app/search', 'GET', params)
  },
  
  // 获取产品评价列表
  getProductReviews(productId) {
    return request(`/travel/review/app/list?productId=${productId}`)
  },
  
  // 获取产品评价统计
  getProductReviewStats(productId) {
    return request(`/travel/review/app/stats?productId=${productId}`)
  },

  // 新增产品评价
  createReview(payload = {}) {
    return request('/travel/review/app', 'POST', payload)
  },

  // 上传评论图片
  uploadImage(filePath) {
    return new Promise((resolve, reject) => {
      wx.uploadFile({
        url: baseURL + '/travel/file/upload',
        filePath,
        name: 'file',
        header: {
          'content-type': 'multipart/form-data'
        },
        success: (res) => {
          if (res.statusCode === 200) {
            try {
              const data = JSON.parse(res.data || '{}')
              if (data.code === 200 && data.data && data.data.url) {
                console.log('图片上传成功:', data.data.url)
                resolve(data.data.url)
                return
              }
              // 处理错误信息
              const errorMsg = data.msg || '上传失败'
              console.error('上传失败:', errorMsg, data)
              reject(new Error(errorMsg))
            } catch (e) {
              console.error('解析上传结果失败:', e, res.data)
              reject(new Error('解析上传结果失败: ' + e.message))
            }
          } else if (res.statusCode === 401) {
            reject(new Error('令牌不能为空，请检查网关白名单配置'))
          } else {
            console.error('上传失败，状态码:', res.statusCode, res.data)
            reject(new Error(`上传失败: ${res.statusCode}`))
          }
        },
        fail: (err) => {
          console.error('上传请求失败:', err)
          let errorMsg = '网络请求失败'
          if (err.errMsg) {
            if (err.errMsg.includes('timeout')) {
              errorMsg = '上传超时，请检查网络连接'
            } else if (err.errMsg.includes('fail')) {
              errorMsg = '网络连接失败，请检查服务地址'
            } else {
              errorMsg = err.errMsg
            }
          }
          reject(new Error(errorMsg))
        }
      })
    })
  }
}



